package com.zjsru.plan2024.oneday;

/**
 * 2970. 统计移除递增子数组的数目 I
 * @Author: cookLee
 * @Date: 2024-07-10
 */
public class IncremovableSubarrayCount {

    /**
     * 主
     * \
     * 输入：nums = [1,2,3,4]
     * 输出：10
     * 解释：10 个移除递增子数组分别为：[1], [2], [3], [4], [1,2], [2,3], [3,4], [1,2,3], [2,3,4] 和 [1,2,3,4]。移除任意一个子数组后，剩余元素都是递增的。注意，空数组不是移除递增子数组。
     * \
     * 输入：nums = [6,5,7,8]
     * 输出：7
     * 解释：7 个移除递增子数组分别为：[5], [6], [5,7], [6,5], [5,7,8], [6,5,7] 和 [6,5,7,8] 。
     * nums 中只有这 7 个移除递增子数组。
     * \
     * 输入：nums = [8,7,6,6]
     * 输出：3
     * 解释：3 个移除递增子数组分别为：[8,7,6], [7,6,6] 和 [8,7,6,6] 。注意 [8,7] 不是移除递增子数组因为移除 [8,7] 后 nums 变为 [6,6] ，它不是严格递增的。\
     * \
     * @param args args
     */
    public static void main(String[] args) {
        IncremovableSubarrayCount incremovableSubarrayCount = new IncremovableSubarrayCount();
        int[] nums = new int[]{1,2,3,4};
        System.out.println(incremovableSubarrayCount.incremovableSubarrayCount(nums));
    }

    /**
     * 可递增子数组计数
     *
     * @param nums nums
     * @return int
     */
    public int incremovableSubarrayCount(int[] nums) {
        int len = nums.length;
        int ans = 0;
        for (int i = 0; i < len; i++) {
            for (int j = i; j < len; j++) {
                if (this.helper(nums, i, j, len)) {
                    ans++;
                }
            }
        }
        return ans;
    }

    /**
     * 帮手
     * 判断递增助手类
     *
     * @param nums  nums
     * @param left  左
     * @param right 右侧
     * @param len   len
     * @return boolean
     */
    private boolean helper(int[] nums, int left, int right,int len ) {
        for (int i = 1; i < len; i++) {
            if(i >= left && i <= right + 1){
                continue;
            }
            //不是递增
            if(nums[i] <= nums[i - 1]){
                return false;
            }
        }
        //判断是否是递增
        return left - 1 < 0 || right + 1 >= nums.length || nums[right + 1] > nums[left - 1];
    }
}
